/**
 * 项目名：	Rumba Plan
 * 
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2006，所有权利保留。
 * 
 * 文件名：	IBUserMgr.java
 * 模块说明：	
 * 修改历史：
 * 2006-8-21 - lxm - 创建。
 */
package com.hd123.rumba.user.biz;

import java.util.List;

import net.sf.hibernate.HibernateException;

import com.hd123.rumba.exception.BusinessException;
import com.hd123.rumba.gwt.base.client.biz.BPersistent;
import com.hd123.rumba.runtime.OperateContext;
import com.hd123.rumba.runtime.biz.IBManager;
import com.hd123.rumba.util.ClassifiedHashtable;

/**
 * 用户 | 业务层 | 管理员 | 接口类
 * 
 * @author lxm
 * 
 */
public interface IBUserMgr extends IBManager {

  /**
   * 新建一个用户。
   * 
   * @param domainUuid
   *          用户所属域uuid。
   * @return 返回创建的用户。
   * @throws BusinessException
   * @throws HibernateException
   */
  public BUser createUser(String domainUuid) throws BusinessException, HibernateException;

  /**
   * 根据uuid载入一个用户。
   * 
   * @param uuid
   *          被载入用户的uuid。
   * @return 返回被载入的用户。若不存在则返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public BUser loadUser(String uuid) throws BusinessException, HibernateException;

  /**
   * 载入指定用户所拥有的角色。
   * <p>
   * 只包含可用的角色。
   * 
   * @param userUuid
   *          指定用户的uuid。
   * @return 返回角色列表。
   * @throws BusinessException
   * @throws HibernateException
   */
  public List<SRole> loadUserRoles(String userUuid) throws BusinessException, HibernateException;

  /**
   * 保存用户到数据库。
   * 
   * @param user
   *          被保存的用户。
   * @param operate
   * @return 返回出错信息，若执行正确则返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public ClassifiedHashtable saveUserT(BUser user, OperateContext operate)
      throws BusinessException, HibernateException;

  /**
   * 保存指定用户所拥有的角色。
   * <p>
   * 利用指定用户进行共享控制，并将产生指定用户的EntityLog。
   * 
   * @param userUuid
   *          指定用户的uuid。
   * @param roles
   *          指定用户所拥有的角色列表。
   * @param operate
   * @param userOca
   *          指定用户的oca。
   * @return 返回出错信息，若执行正确则返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public ClassifiedHashtable saveUserRolesT(String userUuid, List<SRole> roles,
      OperateContext operate, long userOca) throws BusinessException, HibernateException;

  /**
   * 禁用指定用户。
   * 
   * @param userUuid
   *          被禁用用户的uuid。
   * @param operate
   * @param oca
   * @throws BusinessException
   * @throws HibernateException
   */
  public void offlineUserT(String userUuid, OperateContext operate, long oca)
      throws BusinessException, HibernateException;

  /**
   * 启用指定用户。
   * 
   * @param userUuid
   *          被启用用户的uuid。
   * @param operate
   * @param oca
   * @throws BusinessException
   * @throws HibernateException
   */
  public void onlineUserT(String userUuid, OperateContext operate, long oca)
      throws BusinessException, HibernateException;

  /**
   * （标记）删除指定用户。
   * 
   * @param userUuid
   *          被删除用户的uuid。
   * @param operate
   * @param oca
   * @throws BusinessException
   * @throws HibernateException
   */
  public void deleteUserT(String userUuid, OperateContext operate, long oca)
      throws BusinessException, HibernateException;

  /**
   * 恢复已删除的用户。
   * 
   * @param userUuid
   *          被恢复删除用户的uuid。
   * @param operate
   * @param oca
   * @throws BusinessException
   * @throws HibernateException
   */
  public void undeleteUserT(String userUuid, OperateContext operate, long oca)
      throws BusinessException, HibernateException;

  /**
   * 根据uuid取得用户。
   * 
   * @param uuid
   *          被查找用户的uuid。
   * @param bizClass
   *          指定业务层用户对象类型。
   * @return 返回取得的用户。若找不到，则返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public <T extends BPersistent> T getUser(String uuid, Class<T> bizClass) throws BusinessException,
      HibernateException;

  /**
   * 根据uuid取得可用的用户。
   * 
   * @param uuid
   *          被查找用户的uuid。
   * @param bizClass
   *          指定业务层用户对象类型。
   * @return 返回取得的用户。若找不到，则返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public <T extends BPersistent> T getValidUser(String uuid, Class<T> bizClass) throws BusinessException,
      HibernateException;

  /**
   * 取得指定域中所有可用的用户。
   * 
   * @param domainUuid
   *          指定域的uuid。
   * @return 返回符合条件的用户列表。
   * @throws BusinessException
   * @throws HibernateException
   */
  public List<BUser> getAllUsers(String domainUuid) throws BusinessException, HibernateException;

  /**
   * 根据登录名取得用户。
   * 
   * @param domainUuid
   *          被查找用户所属域的uuid。
   * @param login
   *          被查找用户的登录名。
   * @param bizClass
   *          指定返回的用户对象类型。
   * @return 返回用户，若找不到，返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public <T extends BPersistent> T getUserByLogin(String domainUuid, String login, Class<T> bizClass)
      throws BusinessException, HibernateException;

  /**
   * 创建指定用户直接拥有的权限维护代理对象。
   * 
   * @param userUuid
   *          指定的用户uuid。
   * @return 创建的权限维护代理对象。
   * @throws BusinessException
   */
  public IBPermAgent createUserPermAgent(String userUuid) throws BusinessException;

  /**
   * 创建指定用户权限全集维护代理对象。
   * 
   * @param userUuid
   *          指定的用户uuid。
   * @return 创建的权限维护代理对象。
   * @throws BusinessException
   */
  public IBPermAgent createUserProjectivePermAgent(String userUuid) throws BusinessException;
}
